// 测试 正则表达式 以及 RegExp.prototype 的 test 和 exec

let regular ;

// 字符类
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes
// 使用 正则表达式 字面量 创建 RegExp 实例
// regular = /\w/; // \w 表示 英文字母(大写和小写)、阿拉伯数字、下划线，等同于[A-Za-z0-9_]
// regular = /\d/; // \d 表示 阿拉伯数字，等同于 [0-9] 或 [0123456789]
regular = /\s/ ; // \s 表示空白
console.log( regular.test( 'hello 123' ) );
console.log( regular.exec( 'hello 123' ) );

console.log( '- '.repeat(30) );

// 组和范围
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges
regular = /\w+@\w+(.com|.cn|.edu.cn)/;
// 1、\w+ 表示 英文字母(大写和小写)、阿拉伯数字、下划线 至少出现一个符号
// 2、@ 就表示 @ 符号
// 3、(.com|.cn|.edu.cn) 表示 `.com` 、`.cn` 、`.edu.cn` 三者当中任意一个
console.log( regular.test( '5laowang@gebi.com,6laozhang@gebi.cn,7laozhu@gebi.edu.cn' ) );
console.log( regular.exec( '5laowang@gebi.com,6laozhang@gebi.cn,7laozhu@gebi.edu.cn' ) );

console.log( '- '.repeat(30) );

regular = /[a-z]\w*@\w+(.com|.net|.org|.cn|.edu.cn)/;
// 1、[a-z] 表示小写英文字母
// 2、\w* 表示 英文字母(大写和小写)、阿拉伯数字、下划线 可以出现 [ 0 , n ]
console.log( regular.test( 'a@456.com' ) );
console.log( regular.test( 'a123@456.com' ) );

console.log( '- '.repeat(30) );

// 数量词
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions/Quantifiers

// X* 表示 X 可以出现 零次 或 多次 [ 0 , n ]
// X? 表示 X 至多出现 一次 [ 0 , 1 ]
// X+ 表示 X 至少出现 一次 [ 1 , n ]
// X{n} 表示 X 恰好出现 n 次 [ n ]
// X{n,} 表示 X 至少出现 n 次 , [ n , 正无穷 ]
// X{n,m} 表示 X 可以出现 n 到 m 次 ( 注意 n <= m )

regular = /\d{3}/g
// g 表示全局搜索，此时使用 regular 进行验证时会记录验证结果
console.log( regular.exec( 'hello123world456kaifamiao789' ) );
console.log( regular.exec( 'hello123world456kaifamiao789' ) );
console.log( regular.exec( 'hello123world456kaifamiao789' ) );